⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称: CCP1 PWM模式应用
//-----------------------------------------------------------------
//  说明: 本例运行过程中,通过可变电阻器可调节PWM占空比,
//        实现对电机速度的调节
//       (本例PWM频率被固定设为400Hz)
//
//-----------------------------------------------------------------
#include <pic.h>
#define _XTAL_FREQ 4000000UL
#define INT8U   unsigned char
#define INT16U  unsigned int
 int x, x0, PWM_ON_Time ,pre_ADC0_result = 0;
//-----------------------------------------------------------------
// ADC初始化
//-----------------------------------------------------------------
void Init_ADC()
{
    TRISA0 = 1;                   //模拟输入




}

//-----------------------------------------------------------------
// 对通道ch进行模数转换,返回10位精度的转换结果
//-----------------------------------------------------------------
int ADC_Convert(INT8U ch)
{   
    //设置ADCON0寄存器的通道选择位CHS[2..0]=Channel(0~7)
    //选择通道后等待


 
    //开始转换--->等待,直到一次转换结束(ADGO还可替换成GODONE)


    //读取转换结果,并转换为电压值



}

//-----------------------------------------------------------------
// PWM初始化
//-----------------------------------------------------------------
void Init_PWM()
{
    //RC2/CCP1为输出


    //设置PWM模式


    //设置T2CON预分频位为T2CKPS[1:0]=1X,将TMR2预分频率比设为1:16


    //根据公式PWM频率=[(PR2) + 1] * 4 * TOSC * (TMR2预分频值)
    //求出PR2,设置PWM频率为400Hz(2500us PWM周期)


    //TMR2启动



}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
     Init_ADC();  __delay_ms(100);    //ADC初始化
     Init_PWM();                      //CCP1模块PWM模式初始化
     while(1)
     { 
        //获取AN0通道模数转换结果


        //如果模数转换值变化则修改PWM占空比,调节电机转速
        if (x0 != pre_ADC0_result)
        {
           //保存最近一次模数转换结果


           //首先将模数转换结果转换为PWM ON时间(PWM周期为2500us)


           //再根据PWM ON时间计算公式得出10位的CCPR1L与CCP1CON<5,4>
           //设10位的CCPR1L与CCP1CON<5,4>为x;
           //其中由1M振荡频率得TOSC = 0.25us
           //根据公式有: PWM_ON_Time = x * 0.25 * TMR2分频值,可得:


           //将变化后的x写入10位的CCPR1L与CCP1CON<5,4>,
           //其中CCP1CON<5,4>即CCP1X/CCP1Y改变占空比,实现PWM调速 



        }
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -