zhaoxg686 发表于 2024-7-5 18:07:00

求助基于8h8k64u的108k雾化器程序

本帖最后由 zhaoxg686 于 2024-7-5 18:15 编辑

求助,使用STC8H8K64U单片机的P2.5端口输出108kHz的PWM波,并且使用定时器2


void timer2_ISR() interrupt 12{
intcount = 0;
   
    // 每次中断更新P2.5的电平
    if (count < 14) { // 14是根据108kHz计算出来的值
      P2 ^= 0x20; // 翻转P2.5的电平
      count++;
    } else {
      count = 0;
    }
}

void main() {
    // 设置定时器0的工作模式为16位定时/计数器模式
    TMOD = 0x01;

    // 设置定时器0的初值
    // 设置定时器2的初值
                AUXR &= 0xFB;   
    T2H = (65536 - 1000) / 256;
    T2L = (65536 - 1000) % 256;
    // 开启定时器2中断
          AUXR |= 0x10;            //定时器2开始计时
    IE2 = 0x04;
    EA = 1;

    // 设置P2.5为输出模式
    P2M1 = 0x20; // P2.5设置为推挽输出

    while(1) {
      // 主循环体
    }
}

用上面的程序,输出只有0.46khz,请老师指正,谢谢。电路图如下







fjstcmcu 发表于 2024-7-5 20:15:10

不是有PWM例程?为什么这么高频率使用中断翻转完成?

网老四 发表于 2024-7-5 20:30:46

0.46khz实测频率是那个位置测的?
mos经过电容隔直驱动的话,最终mos管gs电压幅值不是5V峰值,而是跟占空比有关,
50%占空比时候隔离电容两端会有2.5V左右直流偏置电压,如果占空比加大,输出到gs的电压有可能不足以开启mos管.

网老四 发表于 2024-7-5 21:13:18

本帖最后由 网老四 于 2024-7-5 21:38 编辑

上面程序里每1000个定时器时钟进一次中断,然后每次中断里IO口翻转一次,想要108khz输出频率,
那么反推回来,定时器中断频率应该也是108khz,定时器1000个时钟中断一次,那么定时器系统时钟应该是108Mhz,咱们STC能跑这么快?

关于超声雾化片驱动,为了提高雾化效率,雾化片通常工作在谐振模式,那么驱动mos管的占空比基本固定在50%左右.然后靠间歇工作的方式,调节工作和间歇时间比来调节雾化片平均输出功率.
我们可以设置单片机系统时钟为21.6Mhz,把定时器配置成时钟分频输出方式,定时器计数周期设为100,定时器溢出频率就等于216khz,每溢出一次,管脚翻转,这样就得到108khz方波输出信号,
也无需开启中断,主程序根据需要间歇开启和关闭定时器输出,就能实现雾化功率调节.当然,间歇开停功能,也可以由另外一个定时器作慢速PWM控制.

zhang32568 发表于 2024-7-5 22:10:48

本帖最后由 zhang32568 于 2024-7-5 22:13 编辑

void timer2_ISR() interrupt 12{
intcount = 0;

你这里定义的时候赋值是0每次进入中断都是0开始的怎么能够累加到14 ?
第一次进入count=1.第二次进入的时候首先执行int count=0,count由1变成0。
int count;就可以了。

网老四 发表于 2024-7-5 22:57:39

zhang32568 发表于 2024-7-5 22:10
void timer2_ISR() interrupt 12{
intcount = 0;



光用int count声明没用的,还是得用static 修饰下才行

xxkj2010 发表于 2024-7-6 08:51:12

这么高的频率,应该PWM才能实现。

社区闲人 发表于 2024-7-6 09:29:22

P2.5通过一个电阻直接驱动栅极。

Lkck8210 发表于 2024-7-6 11:09:48

本帖最后由 Lkck8210 于 2024-7-6 11:34 编辑

108kHz方波
反转周期为1/(2*108k)=4.63us
以24Mhz单片机时钟为例
4.63u * 24M = 111.12
所以定时器的重装值等于
T2L=(65536-111)%256;
T2H=(65536-111)/256;
并设置P1.3脚输出时钟信号

或用12Mhz单片机时钟分频111输出


zhaoxg686 发表于 2024-7-6 17:37:52

谢谢
页: [1] 2
查看完整版本: 求助基于8h8k64u的108k雾化器程序