100KHz还是100Hz
100KHz的话要10us就要进入一次中断,我给你一个51单片机的程序,占空比是50%的
#include <reg52.h>unsigned char PWM_COUNT; //计数unsigned char PWM_VLAUE; //占空比比对值sbit LED = P1^0;void Timer0_init(){ TMOD=0x02; //模式设置,00010000,定时器0,工作于模式2(M1=1,M0=0) TH0=0xf6; //定时器溢出值设置,每隔10us发起一次中断。 TL0=0Xf6; TR0=1; //定时器0开始计时 ET0=1; //开定时器0中断 EA=1; //开总中断}void Time0Inretrupt() interrupt 1{ PWM_COUNT++; if(PWM_COUNT == PWM_VLAUE) //判断是否到了点亮LED的时候 LED = 0; //点亮LED if(PWM_COUNT == 10) //当前周期结束 { LED = 1; //熄灭LED PWM_COUNT = 1; //重新计时 } }void main(){ PWM_COUNT = 1; PWM_VLAUE = 5; //总量为10,占空比为50%的话,令PWM_VLAUE等于5 LED = 1; //默认LED熄灭 Timer0_init() //定时器0初始化 while(1);}
如果只是输出100kHz的方波,普通单片机即可实现了,用定时器设置一个5us固定周期,每次进入中断翻转一次IO口;或者使用定时器的PWM功能,设置周期及占空比即可。
如果要实现阶梯波的功能,普通单片机只能输出0-1,所以输出阶梯波有难度,可以找带DAC输出的单片机,用DAC输出不用的电压,实现阶梯波的功能,但是进度和速度可能会受限。
你的阶梯波形是指什么?
单独方波就是IO口电平切换可以输出(虽然不够平滑),但阶梯的可能需要DAC啦。
100kHz的方波的话,周期是10us
占空比50%,满5us翻转就可以了
用定时器才能精确控制频率,5us变化一次电平,
阶梯波要用dac来做