如何用单片机产生一个三角波?
今天要学习的这个芯片叫做DAC0832技术流程我们不讲,就讲怎么用,学习单片机技术,我提倡如果看不懂,就先拿着用。
看一下如何接线:
wr低电平有效,输入寄存器写选通信号
cs低电平有效, 输入寄存器选择信号
ILE 允许锁存信号,高电平有效
D0-D7 转换数据信号,也就是接在51单片机上接收数据。
XFER 数据传输信号,低电平有效。
Iout 电流输出引脚。
然后先看一下效果图:
然后代码送给大家:
#include "reg52.h" //头文件,包含51类单片机的头文件
#define uchar unsigned char //宏定义,把后面的长句子,定义为前面的短句子
#define uint unsigned int //宏定义,把后面的长句子,定义为前面的短句子
sbit cs=P3^7; //位操作定义,把3.7这个口,重新取个名字。叫CS
sbit wr=P3^6;//位操作定义,把3.6这个口,重新取个名字。叫wr
void delayms(uint xms) //延时子程序
{
uint i,j; //定义两个 无符号整形参数,
for(i=xms;i>0;i--) //循环XMS次
for(j=110;j>0;j--); //循环 xms*110
} //就是上面的循环一次,下面的循环110次,约为1毫秒。
void main() //主程序
{
uchar k= 0; //定义一个无符号数据 K=0,
cs=0; //输入寄存器选择信号 让他低电平。
wr=0;//输入寄存器写选通信号 也让他低电平 ,让他们都有效。
while(1) //判断为真,进行循环
{
while(1) //判断为真进行循环
{
P1= k++ ; //把k+1每次,送入P1口,
delayms(10);//延时10毫秒
if(k==0xff) //如果K+1不等于 256也就是FF,那么就会循环再次加一。
break; //如果等于256,就会退出,执行下一行。
}
while(1) //判断为真,进行循环。
{
P1= k-- ;// 把K-1每次,送到P1口。
delayms(10);//延时10毫秒
if(k==0x00) //如果K=0,那么就结束,如果不等于就继续循环去减一。
break; 如果等于0就退出。从主程序的开头继续运行程序。循环。
然后我们看一下仿真效果。
}
}
}
学了那么多年的单片机,你真的学会了吗?
关于单片机话题,很多电源工程师工作中会遇到不同的问题。其实找到问题的根源,才能对症下药。下面给大家分享几篇不错的文章,供大家学习~
单片机I/O驱动,为什么一般选用三极管而不是MOS管?(作者:硬件笔记本)
这里其实有两个问题:
1.单片机为什么不直接驱动负载?
2.单片机为什么一般选用三极管而不是MOS管?
图1
答:1.单片机的IO口,有一定的带负载能力。但电流很小,驱动能力有限,一般在10-20mA以内。所以一般不采用单片机直接驱动负载这种方式。
2.至于单片机为什么一般选用三极管而不是MOS管?需要了解三极管和MOS管的区别,如下:①三极管是电流控制型,三极管基极驱动电压只要高于Ube(一般是0.7V)就能导通。②MOS管是电压控制型,驱动电压必须高于阈值电压Vgs(TH)才能正常导通,不同MOS管的阈值电压是不一样的,一般为3-5V左右,饱和驱动电压可在6-8V。
我们再来看实际应用:
处理器一般讲究低功耗,供电电压也越来越低,一般单片机供电为3.3V,所以它的I/O最高电压也就是3.3V。
①直接驱动三极管
3.3V电压肯定是大于Ube的,所以直接在基极串联一个合适的电阻,让三极管工作在饱和区就可以了。Ib=(VO-0.7V)/R2。
图2 驱动三极管示意图
②驱动MOS管
通过前面也了解到,MOS管的饱和电压>3.3V,如果用3.3V来驱动的话,很可能MOS管根本就打不开,或者处于半导通状态。
在半导通状态下,管子的内阻很大,驱动小电流负载可以这么用。但是大电流负载就不行了,内阻大,管子的功耗大,MOS管很容易就烧坏了。
所以,一般选择I/O口直接控制三极管,然后再控制MOS管。
图3 I/O口驱动三极管后再驱动MOS管
当I/O为高电平时,三极管导通,MOS管栅极被拉低,负载RL不工作。
当I/O为低电平时,三极管不导通,MOS管通过电阻R3,R4分压,为栅极提供合适的阈值电压,MOS管导通,负载RL正常工作……
实例分析stm32单片机六大滤波算法(作者:liuxiaofei126)
今天分享一下stm32单片机滤波算法
在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。
在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。
为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。
一、采用数字滤波算法克服随机干扰的误差具有以下优点:
数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。二、限幅滤波算法
该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。
A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。
算法的程序代码如下……
单片机编程:如何“喂狗”的灵魂拷问...(作者:嵌入式客栈)
单片机程序写那么多,看门狗狗天天见,你的狗狗养的对么?不停的“喂狗 ”,只要狗不叫就完了嘛?真是这样么?事实上可能不是你想的那么简单.....
啥叫看门狗?
看门狗也称为看门狗定时器,本质上是一种定时电路或者软件定时器机制。
工作原理:
看门狗的硬件基础是一个计数器,该计数器被设置为某个定时初值,然后递减至零。软件负责经常将计数重置为其定时初值,以确保计数永远不会达到零。如果确实达到零,则意味着某种故障发生,该采取对应措施应对,或重启或进入失效安全状态,具体取决于系统的设计。
正常工作时,单片机、处理器或者线程,周期性重置看门狗定时器的定时值,定时器则在后台不断的计数,如果定时时间到了且没有再次喂狗,则狗叫,意味着一些不寻常的事情发生了!此时,狗狗对外发出指令,执行相应的动作。这里所谓的动作究竟是什么?取决于实际系统的设计。常见的看门狗芯片则会发出复位信号给单片机或者处理,对于软件定时器而言,具体会有何种动作,则灵活多变,具体取决于采用何种安全策略。
通俗讲也称为喂狗,这个定时值相当于狗粮,狗狗吃饱了,胃里不断消耗狗粮,如果在消耗完之前没有在喂狗粮,再狗狗饿得直叫唤,发出预警消息。反言之,一个一直正常工作的系统,其看门狗总是被喂养的很好,不会饿了狂叫。
注:看到有文章把重置看门狗定时器叫踢狗(kick watchdog),嗯嗯,这不太好,要对狗狗好一点,不要踢,叫喂吧~
看门狗机制在电子系统中作用非常之重要,这里举个极端的栗子,火星车如果程序挂了,就相当于失联,如果没有看门狗电路。你想象一下是什么场景,无法通讯无法唤醒,秒变太空垃圾~
能看住哪些错误呢?
栈或堆溢出,程序跑飞某段程序异常无法返回或陷入死循环强电磁干扰破坏数据导致系统异常,这你或许不好理解,你就想象一下军事领域,或者航空航天领域很多电子系统,常工作在强电磁干扰环境中bug导致的系统宕机多任务系统中死锁......原因万万千,憋慌!你还有个好狗狗在帮你,让看门狗来收拾残局吧。在一个复杂的嵌入式系统中,不可能保证没有bug,但是通过使用看门狗,您可以保证没有任何bug会无限期地挂起系统。
狗叫后该咋整?
常见的处理策略有哪些呢……
STM32单片机最小系统详解(作者:程序员小哈)
STM32F103RCT6:
STM32F103RCT6是一种嵌入式-微控制器的集成电路(IC),32位 Cortex-M3内核处理器,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是48K,封装LQFP64。
STM32单片机命名规则:
STM32单片机最小系统:
所谓单片机最小系统,就是让单片机能够正常运行,最少且必须的器件所组成的系统。
单片机最小系统上电之后,单片机可以正常复位,下载程序,除此之外没有其他任何功能。
在最小系统保证正确的基础上,可以依次添加其他功能模块或器件,使之单片机具有实际功能。
STM32单片机最小系统包括一个复位电路和一个时钟电路。如下图1所示。
图中复位电路使用的是上电复位电路,STM32单片机NRST引脚输入低电平,则发生复位。
标题图1 STM32F103单片机最小系统
电源引脚:
VDD是单片机的数字电源正极,VSS是数字电源负极,共有5个VDD引脚,5个VSS引脚。VDDA是单片机的模拟电源正极,负责给内部的ADC、DAC模块供电,VSSA是模拟电源负极。
还有一个电源引脚,就是VBAT,BAT就是Battery(电池),这个引脚用来连接电池的正极的。STM32带RTC功能(实时时钟),所以有VBAT引脚。
原理图上预留了一个CR1220纽扣锂电池,当主电源供电存在的情况下,由系统中的VCC3.3给VBAT供电;
当主电源断电之后,由CR1220纽扣电池给STM32自带的RTC模块供电,从而能够保证实时时钟模块在主电源掉电的情况下还能够正常工作。
但是这样设计的话,这里有一个矛盾需要解决。如果VBAT引脚直接与VCC3.3和CR1220连接的话,会存在下面问题:
1、当电池电压高于3.3V,电池就会输出电流到AMS1117,使得芯片发烫,还会很快消耗电池电量。
2、如果电池电压低于3.3V,AMS1117产生的3.3V,就会给电池充电,而这种CR1220电池是不能够充电的。
为了解决上面问题,我们将VBAT引脚的供电电路设计如下:
D1防止电池的电流流向AMS1117,D2防止AMS1117产生的3.3V流向电池。
之所以这样设计,用的就是“二极管的单向导通性”。
正常产品设计的时候,每个电源引脚旁边,最好放置一个0.1uF的电容滤波,用来滤除电源的噪声杂波。
复位引脚NRST
复位就是重启。STM32复位引脚是低电平复位,正常工作状态,复位引脚是高电平。
单片机的置位和复位,其目的都是为了把电路初始化到一个确定状态。复位时在单片机内部单片机是将存储设备和一些寄存器装入生产厂商预设的一个值。一般来说,单片机复位电路的作用是把一个状态机初始化到一个空的状态……
STM32单片机PVD(掉电检测)的介绍及其重要作用(作者:玩转单片机与嵌入式)
有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检测器。通过PVD我们可以设定一个基准电压,当芯片的供电电压高于或低于该基准电压时便产生PVD中断,我们可以在PVD中断里做一些处理。
PVD介绍
本文以STM32F1x为例,来说明PVD的使用。
用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS[2:0]位进行比较来监控电源,这几位选择监控电压的阀值。
通过设置PVDE位来使能PVD。电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD是高于还是低于PVD的电压阀值。
该事件在内部连接到外部中断的第16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当VDD下降到PVD阀值以下和(或)当VDD上升到PVD阀值之上时,根据外部中断第16线的上升/下降边沿触发设置,就会产生PVD中断。例如,这一特性可用于用于执行紧急关闭任务。
由PLS[2:0]的介绍可以发现PVD的电压阈值共有8个等级,实际使用时可根据自己的实际情况进行选择。
对于软件编程中具体如何实现可以自行编写相关代码,也可关注【玩转单片机与嵌入式】公众号,在后台获取相关代码。
PVD的作用
在实际做产品/项目的过程中,可能大家对PVD的作用会忽视掉,下面列举PVD的作用:
1. 记录设备掉电时间
这个很好理解,可能业务上就有这个需求,或者可以利用这一点来完成低功耗设备的待机时长测试。
2. 通知其他处理离线
假如设备中有由干电池供电的MCU1和由锂电池供电的MCU2,MCU1的部分功能可能需要MCU2来完成,MCU1需要知道MCU2是否离线(因为锂电池可拔插,可能随时被拔)。这种情况就可以在MCU2上利用PVD来通知MCU1。通知的方式有很多,例如串口直接通知另一方自己将要断电了。
PS:当然也可通过MCU2监听MCU1的电源来实现……
STC 单片机入门 使用 Keil C51(作者:飞多学堂)
作为国货之光,STC 单片机以其价格便宜、内置接口多等特性在一些大厂不屑一顾的角落茁壮成长。今天我们来学习一下基于 Keil C51 的开发环境搭建,然后编写一个简单的闪灯程序。
先对一些术语去魅:
Microcontroller Unit(MCU)微控制器单元,又称单片机(Single-chip Microcomputer)。Integrate Development Environment(IDE)集成开发环境,一种集成了代码编辑器、编译器、链接器等的开发工具。In System Programming(ISP)在系统可编程,一种在不移除的前提下烧录程序到已经焊接在电路板上的 MCU 的方法。In Circuit Serial Programming(ICSP)串口在系统可编程,ISP 的一种。烧录软件
我们使用 STC-ISP 作为烧录软件。
STC-ISP 下载地址如下:http://www.stcmicro.com/rjxz.html 。STC-ISP 我没有从 STC 官网下载,那个网站实在是太那个啥了,一言难尽。我选择的是 v6.86E 版本,最新的版本我的浏览器不让下,说是有毒,官网也是如此。
下载解压完后,不用安装,直接运行,界面如下:
界面非常的朴实无华,正好是酷炫吊炸天的反面。
STC-ISP 这个软件除了烧录程序,还有它用,等会儿我们再说……
单片机如何能运行如飞?高效实现数学函数的方式!(作者:小麦大叔)
今天给大家分享一下如何在资源紧张,算力较低的单片机上实现三角函数的算法。
之前发过一篇关于IQMath的文章,这个是ti公司平台上的一个数学运算库,里面封装了很多高效的数学运算方法。
例如在不具备浮点运算器的定点处理器使用定点运算,以前写过一篇Q格式的文章,有简单介绍过这些知识。
那么问题来了,有一个读者朋友的硬件平台无法使用IQMath,但是他要进行一些三角函数的运算,那么该如何自己动手实现呢?
下面我们来简单介绍一下整体的思路吧,因为硬件平台的资源比较紧张。
RAM比较少ROM比较少CPU处理速度比较慢所以这里比较常用的方法就是通过空间换时间 ,预先将sin,cos的值存储到数组中,需要用的时候,访问数组就可以得到具体的数据。这也就是我们经常会提到的查表法 。
下面我们来详细介绍一下。
正弦表
这个正弦函数表达式是这样的,
具体如下图所示;
正弦波
首先我们来简单分析一下这个波形:
在蓝色框内是一整个周期的波形;在红色框内是四分之一个周期的波形;其实不难发现,我们只要表示出这四分之一个波形的数据,其余剩下的波形都可以通过换算表示出来。
这样做就大大节省了查表法所需要的空间。
下面我们来介绍一下具体如何实现;
首先我们得搞清楚一个点,就是量纲,统一用归一化的形式来做。
y的范围是 [-1, 1];x的范围是[0, 2π],当然,x的范围[-π, π]也是没问题的,下面会继续介绍;而在实际的程序中,我们是无法这样去做的,这些数值我们期望通过整形类型去访问,所以我们要做到几点:
尽量避免使用浮点运算;尽量避免除法;尽量避免乘法;所以这里有必要先了解一下Q格式,用左移和右移去代替乘法和除法,提高运算效率;
对于X轴的数据,于是可以将[0, 2π]细分成 128 ,256,512或者 1024 等等;
这里我们先细分成1024等份,正如前面提到的,只需要选择前四分之一周期的内容即可……
STM32单片机和51单片机有何区别?(作者:巧学模电数电单片机)
单片机简单来说就是集CPU(运算、控制)、RAM(数据存储-内存)、ROM(程序存储)、输入输出设备(串口、并口等)和中断系统处于同一芯片的器件。
在个人电脑中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑,而单片机将这些都集中在了一个芯片上。
51单片机:
应用最广泛的8位单片机,当然也是初学者们最容易上手学习的单片机。
最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。0151单片机特性51单片机之所以成为经典,成为易上手的单片机主要有以下特点:
从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。
不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。
同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便。
乘法和除法指令,这给编程也带来了便利,很多的八位单片机都不具备乘法功能,做乘法时还得编上一段子程序调用,十分不便。
51单片机缺点:
AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担。虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋。运行速度慢,特别是双数据指针,如能改进能给编程带来很大的便利。51保护能力很差,很容易烧坏芯片。51单片机应用范围:
目前在教学场合和对性能要求不高的场合大量被采用。
使用最多的器件:8051、80C51。
STM32单片机:
由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。
其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核;同时具有一流的外设,1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等。
在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度。由于其简单的结构和易用的工具,再配合其强大的功能,在行业中赫赫有名。
STM32单片机特性:
内核: ARM 32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz,单周期乘法和硬件除法。存储器: 片上集成32-512KB的Flash存储器,6-64KB的SRAM存储器。时钟、复位和电源管理: 2.0-3.6V的电源供电和I/O接口的驱动电压,POR、PDR和可编程的电压探测器(PVD),4-16MHz的晶振,内嵌出厂前调校的8MHz RC振荡电路,内部40 kHz的RC振荡电路,用于CPU时钟的PLL,带校准用于RTC的32kHz的晶振。调试模式: 串行调试(SWD)和JTAG接口,最多高达112个的快速I/O端口、最多多达11个定时器、最多多达13个通信接口……意犹未尽,查看更多精彩文章→→https://www.dianyuan.com/eestar/
相关问答
单片机 sec什么意思?secx是正割,定义斜边比邻边也就是余弦的倒数。secx=1/cosxcscx是余割,定义斜边比对边也就是正弦的倒数。cscx=1/sinx与SEC(正割)相对的叫CSC(余割)...
51 单片机 怎样计算sin(x);和cos(x)?三角函数的计算是使用的弧度(rad),如果你得到的角度单位是度(deg),需要将deg转换为rad才能用三角函数计算。1rad=180/π,所以任意度数x转换为弧度就是x*π...
【keil4中计算 三角函数 出错doublea;a=sin((double)3);结果为...[最佳回答]请把“doublea;”中的a换成a01或其他的字母及组合等.切记:普通变量名不要与keil及对应单片机保留字相同.请把“doublea;”中的a换成a01或其他...
用 单片机 STC12C5410AD控制DAC0832输出方波, 三角波 ,正弦波...由于题目没有给出DAC0832的接口,本人将采用以下接口:DAC0832的CS引脚接单片机的P1.0口DAC0832的CLK引脚接单片机的P1.1口DAC0832的DIN引脚接单片机...
谁会利用 单片机 做星 三角 降压启动控制器?这个应该不难啊,你学过单片机吗?星三角降压启动只是改变两个接触器的通断来实现星三角转换的,所以说我们只需要来控制着两个接触器即可,我们可以通过两个继电...
Icl8038是 单片机 吗?Icl8038不是我们常说的单片机,只是一个函数发生器芯片,加少量的外部元件就能工作,不用编程。ICL8038是一种具有多种波形输出的精密振荡集成电路,只需调整...
合泰 单片机 HT66F0185支持浮点数类型的数据吗?多数单片机硬件上不支持浮点运算,但C语言库函数可以支持浮点运算,而不用你去了解它是怎么实现的。添加math.h头文件,连三角函数也可以计算多数单片机硬件上...
在C语言中输入三个数判断他们能否构成 三角 形,如果可以,能构成何种 三角 形?可以,构成等边、直角三角形等。1.if((a*a+b*b)==c*c||(b*b+c*c)==a*a||(a*a+c*c)==b*b),{printf("这三个数构成的是直角三角形"...
结合DAC0832实现程序控制产生正弦波、 三角 波、方波和锯齿...[回答]89s52thisarticletotherealizationofaprogramcombiningdac0832controlsinusoidalwaves,wavea...
单片机 做数字频率计的特点?本应用系统设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生...