1. 用51单片机同时实现四路PWM波,(C语言)
定个时间20ms周期的定时器,然后在定时器到达那些点的时候,让自己设的那些变量依次变化。 再根据自己的变量,付给输出端口就可以了。 看着像舵机的
看了你追问的,原来是四路每一路都产生变化的波形。那个也好办。可以通过计算,把这几个波形统一起来成一个周期,比如开始0.5ms到了,让定的值取反,再加19.5再取反,再加1.3Ms再取反,再加18.7ms再取反...然后一直这样把几个都写完。
还有种方法,来改变第一个pwm的设定值。比如放数组里一共5个设定值,分别代表你设定的高电平时间,依次替换第一个定时器里面的中端时间即可。
当然,前两种都差不多,还有一种方法供你扩展:就是用两个定时器,然后按照时间去匹配修改。当然,51单片机那精度就不说了,不太确信可以达标,一个定时器进中断了,另一个就要停一下。。
BTW,个人感觉51的单片机没有很好的pwm模块,这样写了Pwm程序,别的就干不了了。建议用用带epwm模块的mcu,直接调用epwm和epwm中断,节省cpu资源,可以多写很多程序。
2. stc8h单片机如何设置pwm频率
首先,STC8H不需要外部晶振和外部复位,也可以外接。它的时钟4M-36M。和其它stc芯片的区别是它的运行速度够快,8路16位的高级pwm定时器,4路可以输出互补的脉冲信号,在用这个芯片的时候我发现手册上有些地方讲的不是太清楚,对照了32的手册才明白了原理,今天着重说一下高级定时器的那部分。
STC8H 系列的单片机内部集成了 8 通道 16 位高级 PWM 定时器,分成两组周期可不同的 PWM,分别命名为 PWMA 和 PWMB可分别单独设置。第一组 PWM/PWMA 可配置成 4 组互补/对称/死区控制的 PWM 或捕捉外部信号,第二组 PWM/PWMB 可配置成 4 路 PWM 输出或捕捉外部信号。
pwmA可配置成输出比较,输入捕获以及pwm模式,pwm有边沿对齐以及中间对齐模式,可直接驱动一些小型的电机,在驱动一些小型的电机时一定要将相应的io口配成推挽输出在,不然驱动不起来,具体的原理就不写了,主要说一下主要寄存器以及主要模式的配置。
选择计数器时钟(内部、外部或者预分频器(PSCR)),我用的都是内部。
预分频器看你想要输出的频率范围自己设置
2. 将相应的数据写入 PWMA_ARR(设频率) 和 PWMA_CCRi (设占空比)寄存器中。频率=时钟/(PSCR+1)/(ARR+1)
3. 如果要产生一个中断请求,设置 CCiIE 位,在中断判断SR1状态位,PWMA和PWMB不是一个中断号。
4. 选择输出模式步骤:
1. 设置 OCiM=011,在计数器与 CCRi 匹配时翻转 OCiM 管脚的输出
2. 设置 OCiPE = 0,禁用预装载寄存器
3. 设置 CCiP = 0,选择高电平为有效电平,开始输出高电平。
4. 设置 CCiE = 1,使能输出
5. 设置 PWMA_CR1 寄存器的 CEN 位来启动计数器。
输入捕获配置:
先设置PSCR,根据你的所测频率范围来设数据。设ARR一般为最大值
1.选择有效输入端,设置 PWMA_CCMR1 寄存器中的 CC1S=01,此时通道被配置为输入,并且PWMA_CCR1 寄存器变为只读。
2. 根据输入信号 TIi 的特点,可通过配置 PWMA_CCMR1 寄存器中的 IC1F 位来设置相应的输入滤波器的滤波时间。假设输入信号在最多 5 个时钟周期的时间内抖动,我们须配置滤波器的带宽长于 5 个时钟周期;因此我们可以连续采样 8 次,以确认在 TI1 上一次真实的边沿变换,即在PWMA_CCMR1 寄存器中写入 IC1F=0011,此时,只有连续采样到 8 个相同的 TI1 信号,信号才为有效(采样频率为 fMASTER)。
3. 选择 TI1 通道的有效转换边沿,在 PWMA_CCER1 寄存器中写入 CC1P=0(上升沿)。
4. 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写 PWMA_CCMR1 寄存器的 IC1PS=00)。
5. 设置 PWMA_CCER1 寄存器的 CC1E=1,允许捕获计数器的值到捕获寄存器中。
6. 如果需要,通过设置
PWMA_IER 寄存器中的 CC1IE 位允许相关中断请求。
7.使能计数器设置 PWMA_CR1 寄存器的 CEN 位来启动计数器。
3. 立创上面的STC12C5410AD单片机能输出几路PWM
STC12C5410AD 单片机,是高速/ 低功耗/ 超强抗干扰的新一代8051 单片机,指令代码完全兼容传统8051,但速度快8-12 倍,内部集成MAX810 专用复位电路。4 路PWM,8 路高速10 位A/D 转换,针对电机控制,强干扰场合。
1. 增强型 8051 CPU,1T,单时钟/ 机器周期,指令代码完全兼容传统8051
2. 工作电压:
STC12C5410AD 系列工作电压:5.5V - 3.5V(5V 单片机)/ 3.8V - 2.2V(3V 单片机)
3. 工作频率范围:0 - 35 MHz,相当于普通8051 的 0~420MHz
4. 用户应用程序空间1K / 2K / 4K / 6K / 8K / 10K / 12K 字节......
5. 片上集成 512 字节 RAM(STC12C5410AD 系列),
6. 通用I/O 口(27/23/15 个),复位后为: 准双向口/ 弱上拉(普通8051 传统I/O 口)
可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/ 高阻,开漏
每个I/O 口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
7. ISP (在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器
可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
8. EEPROM 功能
9. 看门狗
10. 内部集成MAX810 专用复位电路(外部晶体12M 以下时,可省外部复位电路)
11. 时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器 用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟 常温下内部R/C 振荡器频率为:5.2MHz ~ 6.8MHz
精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,应认为是4MHz ~ 8MHz
12. 共6 个16 位定时器/ 计数器,两个专用16 位定时器T0 和T1再加上PCA 模块可再实现4 个16 位定时器。
13. 2 个时钟输出口,可由T0 的溢出在P1.0 输出时钟,可由T1 的溢出在P1.1 输出时钟
4. 51单片机一共能产生几路pwm波控制电机速度。
这与定时器的数量有关,还有的单片机有专门的PWM发生器,比如STC12系列的就有两个PWM定时器。当然还可以用另外两个定时器模拟PWM,所以共有四个,想52单片机有3个定时器,所以可以模拟出3路PWM。
5. 51单片机可以输出几路PWM
现在好多51单片机有自带的PWM,没有的话可用定时器做啊
比如STC的好多都有,最多的有四路PWM