STC单片机PWM编程!
发布时间:2025-05-20 15:11:58 发布人:远客网络
一、STC单片机PWM编程!
看看这个,单片机用的是ADUC848,AD转换输出正弦波,和PWM原理类似。
1.了解芯片内部D/A转换模块设置方法。
3.了解Keil软件中逻辑分析仪的使用方法。
4.了解用单片机产生正弦信号的基本方法。
ADuC848中包含一个12位电压输出DAC模块,DAC模块中寄存器的设置如下:
1=设置DAC输出引脚为Pin13(AINCOM);
0=设置DAC输出引脚为Pin14(DAC);
1=设置DAC的输出范围为0V-AVDD;
0=设置DAC的输出范围为0V-2.5V(VREF);
0=复位DAC数据寄存器DACL/Hto0;
DACH为12位转换的高位数据寄存器
DACCONEQU0xfD;定义模数转换控制器
DACHEQU0xfc;定义模数转换数据寄存器高8位
DACLEQU0xfb;定义模数转换数据寄存器低8位
MAIN:MOVDACCON,#0fH;DACoperation
DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH
DB0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H
DB0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH
DB80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H
DB0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H
DB1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH
无需插针配置,注意DAC是从CONDACOUT1端子输出,可用示波器观察DAC输出波形。若产生失真情况,请检查开发板DA输出端LM358运算放大器的放大倍数,适当更改所查函数表的范围。
1、改变程序,使能添加输出锯齿波;
2、改变程序,使输出添加三角波;
4、改变程序,并制作一个简单的函数发生器
二、单片机C语言PWM的典型程序谢谢
1、利用定时器控制产生占空比可变的PWM波,是单片机应用中常见的技术。通过调节PWM值,可以控制电机的转速,实现加速或减速的功能。当按下K1键时,PWM值增加,占空比减小,电机减速;按下K2键时,PWM值减小,占空比增加,电机加速。如果PWM值增加到最大值或减小到最小值,蜂鸣器将报警。
2、以下是实现上述功能的典型程序代码:
3、首先,定义必要的位变量和函数。K1和K2分别对应增加和减少PWM值的按键,BEEP表示蜂鸣器。PWM初始值设为0x7F。
4、在主函数中,初始化端口和定时器。设置定时器0的1ms延时常数,定时器1用于脉宽调节。通过按键控制PWM值的增减,当PWM值达到最大或最小值时,蜂鸣器发出警报。
5、定时器0中断服务程序用于设置定时器0的频率,启动输出。定时器1中断服务程序则用于设置定时器1的脉宽,结束输出。
6、蜂鸣器子程序用于产生短促的蜂鸣声。延时子程序用于实现毫秒级的延时,确保程序运行的稳定性和准确性。
7、通过上述程序,可以实现对PWM波的精确控制,进而实现对电机速度的调节。
三、急求msp430f149单片机产生pwm波控制2个电机转动的C程序
哈哈,你还真找对人了。看看下面的...
void SetScale(unsigned int sc);
void SetFre(unsigned int fre);
unsigned char GoPwm(unsigned char doit);
/*******************************************************************************
描述:使用定时器B进行PWM输出。输出的频率和占空比由串行口发送来的指令确定。
*******************************************************************************/
/*****************************************************************************
*****************************************************************************/
TBCTL= TBSSEL_1+ TBCLR;//时钟源为ACLK
TBCCTL1= OUTMOD_7;//工作在复位/置位模式
PWM_SEL|= PWM_IO;//选择输出端口的第二功能
/*****************************************************************************
*****************************************************************************/
void SetScale(unsigned int sc)
/*****************************************************************************
*****************************************************************************/
/*****************************************************************************
doit:0:停止 100:运行其它:什么都不做,只返回运行状态
*****************************************************************************/
unsigned char GoPwm(unsigned char doit)
TBCTL&=~(MC0+MC1);//关闭定时器
TBCTL|= MC_2;//打开定时器,计数模式2
if((TBCTL&MC_0)==0)//判断PWM是否运行