打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】ADC读取片内温度和PWM驱动舵机测试

[复制链接]
30013|69
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#  @21小跑堂

【1】ADC读取设备温度测试:
首先,使用在MCC工具中添加Drivers → ADCC → ADCC,FVR,MEMORY,TMR2,其中先设置固定参考电压FVR,设置如下,稍后该电压将作为ADC的参考电压;
接下来设置TMR2,设置TMR2的周期为0.5s,稍后将使用TMR2来触发ADC进行转换;

接下来设置ADC,使用Burst_average_mode,时钟选择Frc,右对齐,参考电压使用FVR,自动转换触发选择TMR2,由于设置的TMR2周期为0.5s,也就是1秒进行两次AD转换;

最后,使能MEMORY,因为要从中读取参数值。

设置完成后生成程序代码,同时在主函数中增加ADC读取与温度转换程序,编写完成后编译下载程序至开发板。
#include "mcc_generated_files/mcc.h"
#include "stdio.h"

//Sets sampling channel of ADCC without starting conversion
#define SetAcquisitionChannel(X) do { ADPCH = X; } while (0)


void Int0_ISR(void)
{
    printf("Key Pressed!\r\n");
}

/*
                         Main application
*/
void main(void)
{
    // Initialize the device
    SYSTEM_Initialize();
   
    int16_t gain;
    int16_t offset;
   
    gain = FLASH_ReadWord(DIA_TSHR1);  
    offset = FLASH_ReadWord(DIA_TSHR3);
   
    INTERRUPT_GlobalInterruptEnable();
    uint16_t ADC_MEAS = 0;
    int24_t temp_c = 0;
    SetAcquisitionChannel(channel_Temp);

    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global Interrupts
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();
   
    IO_SW0_SetPullup();
    INT0_SetInterruptHandler(Int0_ISR);

    while (1)
    {
        // Add your application code
        printf("Hello World!\r\n");
        __delay_ms(1000);
        
        asm ("SLEEP");
        asm ("NOP");
        ADC_MEAS = ADCC_GetConversionResult();
        temp_c = (int24_t) (ADC_MEAS) * gain;
        temp_c = temp_c / 256;
        temp_c = temp_c + offset;
        temp_c = temp_c / 10;
        printf("Device Temperature: %dC \r\n", temp_c);
    }
}
查看串口输出内容:


【2】PWM驱动舵机实验:
舵机是目前小型机器人或云台摄像头等智能产品中常用的一种电机装置,通常其最大旋转角度为180,有的也可以为360°。舵机的控制信号线有三种,分别是+5V、GND和信号线。控制方式采用PWM控制。本次使用单片机的PWM模块驱动SG90舵机,硬件连线如下:
+5V----------------------------------VTG
GND---------------------------------GND
信号线-------------------------------RC7
首先使用MCC配置工具添加Drivers → PWM→ PWM1_16BIT,然后配置PWM模块的时钟,并设置PWM的频率为50Hz,同时将PMW11的输出引脚映射到RC7引脚;


接下来生成程序代码,并在程序中添加控制程序,主要用来改变PWM的占空比,进而控制舵机进行180°转动,程序如下:
#include "mcc_generated_files/mcc.h"
#include "stdio.h"

//Sets sampling channel of ADCC without starting conversion
#define SetAcquisitionChannel(X) do { ADPCH = X; } while (0)


void Int0_ISR(void)
{
    printf("Key Pressed!\r\n");
}

/*
                         Main application
*/
void main(void)
{
    // Initialize the device
    SYSTEM_Initialize();
   
    int16_t gain;
    int16_t offset;
   
    uint16_t dutyVal = 300;
    uint8_t dir = 1;
   
    gain = FLASH_ReadWord(DIA_TSHR1);  
    offset = FLASH_ReadWord(DIA_TSHR3);
   
    INTERRUPT_GlobalInterruptEnable();
    uint16_t ADC_MEAS = 0;
    int24_t temp_c = 0;
    SetAcquisitionChannel(channel_Temp);

    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global Interrupts
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();
   
    IO_SW0_SetPullup();
    INT0_SetInterruptHandler(Int0_ISR);

    while (1)
    {
        // Add your application code
        
        if(dir == 1) dutyVal++;
        else dutyVal--;
        
        __delay_ms(5);
        
        if(dutyVal <= 100)
            dir = 1;
        if(dutyVal >= 500)
            dir = 0;
        
        PWM1_16BIT_SetSlice1Output1DutyCycleRegister(dutyVal);
        PWM1_16BIT_LoadBufferRegisters();
    }
}
编写程序完成后,编译程序并下载至开发板,可以看到舵机可以进行相应的运动了。




51696612f0dc1134a0.png (174.97 KB )

51696612f0dc1134a0.png

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
hu9jj + 10 赞一个!
沙发
gygp| | 2021-9-2 20:43 | 只看该作者
这个ADC可以用内部校准吗?      

使用特权

评论回复
板凳
chenci2013| | 2021-9-2 20:44 | 只看该作者
现在都是图形化界面了吗   

使用特权

评论回复
地板
biechedan| | 2021-9-2 20:44 | 只看该作者
这个软件在哪里下载的   

使用特权

评论回复
5
wangdezhi| | 2021-9-2 20:44 | 只看该作者
版主分享的资料非常详细呢。      

使用特权

评论回复
6
isseed| | 2021-9-2 20:44 | 只看该作者
CuriosityNano真是小巧玲珑   

使用特权

评论回复
7
xietingfeng| | 2021-9-2 20:45 | 只看该作者
可以直接输出5V的信号吗   

使用特权

评论回复
8
suzhanhua| | 2021-9-2 20:45 | 只看该作者
舵机需要多大占空比的pwm呢?     

使用特权

评论回复
9
mituzu| | 2021-9-2 20:45 | 只看该作者
可以对寄存器直接写入操作吗     

使用特权

评论回复
10
hellosdc| | 2021-9-2 20:45 | 只看该作者
固定参考电压FVR会不会跟随外部电源变化呢  

使用特权

评论回复
11
uiint| | 2021-9-2 20:45 | 只看该作者
很详细的测评报告,支持。            

使用特权

评论回复
12
hbzjt2011|  楼主 | 2021-9-2 20:50 | 只看该作者
suzhanhua 发表于 2021-9-2 20:45
舵机需要多大占空比的pwm呢?

【RISC-V MCU CH32V103测评】PWM控制舵机测试
https://bbs.21ic.com/icview-3054106-1-1.html?fromuser=hbzjt2011
(出处: 21ic电子技术开**坛)
这个有详细说明,请参考!

使用特权

评论回复
13
hbzjt2011|  楼主 | 2021-9-2 20:50 | 只看该作者
uiint 发表于 2021-9-2 20:45
很详细的测评报告,支持。

谢谢支持

使用特权

评论回复
14
hbzjt2011|  楼主 | 2021-9-2 20:51 | 只看该作者
biechedan 发表于 2021-9-2 20:44
这个软件在哪里下载的

、【CuriosityNano测评报告】开发板LED、UART、KEY及Timer功能测试
https://bbs.21ic.com/icview-3157478-1-1.html?fromuser=hbzjt2011
(出处: 21ic电子技术开**坛)
点击里面的超链接可以下载

使用特权

评论回复
15
kimi505| | 2021-9-11 22:09 | 只看该作者
本帖最后由 kimi505 于 2021-9-11 22:10 编辑

重复已删

使用特权

评论回复
16
kimi505| | 2021-9-11 22:09 | 只看该作者
hbzjt2011 发表于 2021-9-2 20:51
、【CuriosityNano测评报告】开发板LED、UART、KEY及Timer功能测试
https://bbs.21ic.com/icview-3157478 ...

楼主,请问你2015年参加的一个活动。【克隆:第六期】+ DS90UB914A-CXEVM REV A评估板。
请问资料还在吗?我想打个板子做试验,可否帮忙啊

使用特权

评论回复
17
hbzjt2011|  楼主 | 2021-9-13 09:46 | 只看该作者
kimi505 发表于 2021-9-11 22:09
楼主,请问你2015年参加的一个活动。【克隆:第六期】+ DS90UB914A-CXEVM REV A评估板。
请问资料还在吗 ...

不好意思,这个时间太久了,找不到了

使用特权

评论回复
18
cyclefly| | 2021-9-16 19:43 | 只看该作者
这个不太懂,看来还要接着学啊

使用特权

评论回复
19
hu9jj| | 2021-11-1 13:46 | 只看该作者
设置介绍的很详细,赞一个!

使用特权

评论回复
20
hu9jj| | 2021-11-1 13:47 | 只看该作者
设置介绍的很详细,赞一个!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎参与LabVIEW版块的讨论学习! 点我一键即达

157

主题

2338

帖子

41

粉丝