• 【单片机】【710】逆变


    20170322

     1  Key_Receive = KeyScan();
     2         switch(Key_Receive){        //按下RE0(93脚)来控制开关
     3             case 1:                               
     4 //                PR2 = 2000;     //载波20KHz 
     5                 OC1CONbits.OCM = 0b110; 
     6                 OC2CONbits.OCM = 0b110; 
     7                 DISPLAY_stri(0,0,"   ");
     8                 DISPLAY_stri(0,0,"ON");     
     9                 Key = ~Key;
    10                 if(Key == 0){
    11                     OC1CONbits.OCM = 0b000;
    12                     OC2CONbits.OCM = 0b000;
    13                     OC1RS = 0;
    14                     OC2RS = 0;
    15                     DISPLAY_stri(0,0,"   ");
    16                     DISPLAY_stri(0,0,"OFF");    
    17                 }                
    18                 break;

    上面是正常工作的按键写法,作用是开关逆变的输出。先回忆一下逆变的配置方法

    1. 各种初始化,CPU,Timer2,ADC,PWM,LCD(如果有显示的话),PR2的值(我的习惯写法,方便改动,在初始化里面可写可不写)
    2. 按键控制,先声明一个unsigned char类型的变量(Key_rec)来接收按键扫描的值,然后用switch在while(1)里面依据接收到的值执行不同的指令。
    3. 配置PWM输出,逆变需要两路来输出,本人用的710(虽手册上写有半桥输出功能,但却无法配置),配置时,OCx里的x就是对应的输出引脚,此时须注意凡是初始化里的语句里带有OCx的指令,x必须要全部和你配置的那个脚对应的x一样。控制占空比的寄存器是OCxRS(PWM输出模式下)。
    4. 添加表格。按你想要输出的频率生成相应的表格,计算方法是先计算多久进一次中断t,然后用你想要频率F的周期T去除以t,得到的就是逆变的点数。最大值不得超过定时器的比较值(PR2的值),所以要注意如果乘倍率的时候最大值不要超过PR2。不然输出是空心的。
    5. 中断输出,最后的一步了。把表格的值一个一个输出去就行了,一般只用到表格的一半的值,为什么,你看代码就知道了
     1 void __attribute__((__interrupt__, __shadow__)) _T2Interrupt(void) {
     2               
     3     if (p < 200) {                   //50Hz
     4         OC1RS = rate*Count4[p];
     5         OC2RS = 0;
     6     }
     7     if (p >=200) {
     8         OC1RS = 0;
     9         OC2RS = rate*Count4[p-200];
    10     }
    11     p++;
    12     if (p >= 400) 
    13         p = 0;
    14     IFS0bits.T2IF=0;
    15 }

     最后要提醒,一定要注意看门狗有没有关,这里用不到看门狗。所以去CPU的配置文件里关了吧,不然你的单片机过一会就会自动复位了(如果你有开关按键,那么就是给你到关闭状态了)。这是个教训。

  • 相关阅读:
    PHP深度学习参考地址
    随手记两个链接,关于自适应屏幕显示的
    数据库查询,指定查询结果某列为固定值
    $('#id").load
    【转】Caused by: android.os.NetworkOnMainThreadException错误解决办法
    @Autowired注入DAO对象为NULL
    1-sqoop
    1-kylin架构
    1-kudu架构原理读写流程
    2、apache druid界面说明
  • 原文地址:https://www.cnblogs.com/iteou/p/6607773.html
Copyright © 2020-2023  润新知