您当前的位置:首页 > 互联网教程

STC单片机PWM编程!

发布时间:2025-05-20 15:11:58    发布人:远客网络

STC单片机PWM编程!

一、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是否运行