项目硬件:
1.大联大世平基于NXP传感器
2.USBHID通信芯片
3.低通滤波器输出信号调制器
4.DHT11传感器
5.大气压传感器
6.六轴陀螺仪
项目软件:
1.x86 QT上位机
项目功能:
1.通过DHT11温湿度传感器采集环境温度与湿度
2.通过AD模数采集器采集模拟信号
3.通过大气压传感器采集大气压值
4.通过定时器PWM外设调制输出不同频率与占空比的周期波形
5.通过六轴陀螺仪采集三轴加速度和三轴角度值
项目框图:
![6.jpg 6.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/003902ahe3qompmqm3x3eq.jpg)
流程图:
![7.jpg 7.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/004149qg8p5zup59gkeg8v.jpg)
QT程序主界面1,温湿度/大气压强:
![1.jpg 1.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/003914i2zgfv222aa33e6i.jpg)
左图曲线为15个时间点的温湿度变化曲线,右图为实时计数仪表盘,红色指针为温度,蓝色指针为湿度,黄色指针为大气压强
QT程序主界面2,简易示波器:
![3.jpg 3.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/004423bjhn1q1691jghzg4.jpg)
因为时间仓促,没有对横纵坐标值进行优化,大概框架为横坐标1000个点表示999个AD模拟信号采集个数,纵坐标400个点表示采集值,此界面为时分信号采集界面,按原计划本来想做频分采集界面,因为时间紧迫而没有完成。时分采集界面支持两种模式,单个数值采集添加模式和帧采集模式:
-
单个数值采集添加模式表示波形图界面每次增加一个数值,增加后所有坐标值往左平移一格,最左边坐标值舍弃,一个时间单位刷新1个数据,以此类推;
-帧采集模式表示波形图每次添加1000个数值,此1000个数值为同一帧,添加到波形图上,一个时间单位刷新一帧1000个数据,以此类推;
QT程序主界面3,控制PWM波形输出:
![4.jpg 4.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/005002bhnvcs6ws6e7ssj0.jpg)
可以控制PWM波形的输出间隔和占空比,非常简单的一个功能,其中输出间隔分为粗调和微调,粗调为100倍分频,微调为1倍分频,直接带过,通过示波器查看PWM输出效果,先将频率设高一点,调整占空比:
![IMG_20210926_234857.jpg IMG_20210926_234857.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/235440z9ablaimmfvg2zsw.jpg)
![IMG_20210926_234904.jpg IMG_20210926_234904.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/235445bzelsc91ololceza.jpg)
![IMG_20210926_234909.jpg IMG_20210926_234909.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/235451snwadwhu518mhnia.jpg)
然后将频率降低,同样调整占空比:
![IMG_20210926_234916.jpg IMG_20210926_234916.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/235500w4uo40s2s4r4ru0x.jpg)
![IMG_20210926_234920.jpg IMG_20210926_234920.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/235511saad6rg121d26wdz.jpg)
![IMG_20210926_234926.jpg IMG_20210926_234926.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/235523monr1zgzfz11ntto.jpg)
QT程序主界面4,六轴陀螺仪输出:
![5.jpg 5.jpg](https://static.assets-stash.eet-china.com/forum/202109/26/005243uwlbcdzgglul7bzd.jpg)
十字坐标表示三轴角度,进度条表示加速度,使用的器件为I2C接口的MPU6050六轴陀螺仪。
QT上位机程序:
![](static/image/filetype/zip.gif)
2021-9-28 11:43 上传
点击文件名下载附件
![](static/image/filetype/zip.gif)
2021-9-28 11:42 上传
点击文件名下载附件
![](static/image/filetype/zip.gif)
2021-9-28 11:42 上传
点击文件名下载附件
![](static/image/filetype/text.gif)
2021-9-28 11:42 上传
点击文件名下载附件
DHT11驱动代码:
void DHT11_Rst(void) { DHT11_IO_OUT(); DHT11_DQ_OUT(0); Delay_ms(20); DHT11_DQ_OUT(1); Delay_us(30); } unsigned char DHT11_Check() { unsigned char retry=0; DHT11_IO_IN(); while (DHT11_DQ_IN&&retry<100) { retry++; Delay_us(1); }; if(retry>=100)return 1; else retry=0; while (!DHT11_DQ_IN&&retry<100) { retry++; Delay_us(1); }; if(retry>=100)return 1; return 0; } unsigned char DHT11_Read_Bit(void) { unsigned char retry=0; while(DHT11_DQ_IN&&retry<100) { retry++; Delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100) { retry++; Delay_us(1); } Delay_us(40); if(DHT11_DQ_IN)return 1; else return 0; } unsigned char DHT11_Read_Byte(void) { unsigned char i,dat; dat=0; for (i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit(); } return dat; } unsigned char DHT11_Read_Data(unsigned char *temp,unsigned char *humi) { unsigned char buf[5]; unsigned char i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++) { buf[i]=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }else return 1; return 0; }
复制代码void I2C_Start(void){ SDA_OUT(); I2C_SDA(1); I2C_SCL(1); Delay_us(4); I2C_SDA(0); Delay_us(4); I2C_SCL(0); } void I2C_Stop(void) { SDA_OUT(); I2C_SCL(0); I2C_SDA(0); Delay_us(4); I2C_SCL(1); I2C_SDA(1); Delay_us(4); } unsigned char I2C_Wait_Ack(void) { unsigned char ucErrTime=0; SDA_IN(); I2C_SDA(1); Delay_us(1); I2C_SCL(1); Delay_us(1); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { I2C_Stop(); return 1; } } I2C_SCL(0); return 0; } //²úÉúACKÓ¦´ð void I2C_Ack(void) { I2C_SCL(0); SDA_OUT(); I2C_SDA(0); Delay_us(2); I2C_SCL(1); Delay_us(2); I2C_SCL(0); } void I2C_NAck(void) { I2C_SCL(0); SDA_OUT(); I2C_SDA(1); Delay_us(2); I2C_SCL(1); Delay_us(2); I2C_SCL(0); } void I2C_Send_Byte(unsigned char txd) { unsigned char t; SDA_OUT(); I2C_SCL(0); for(t=0;t<8;t++) { I2C_SDA((txd&0x80)>>7); txd<<=1; Delay_us(2); I2C_SCL(1); Delay_us(2); I2C_SCL(0); Delay_us(2); } } unsigned char I2C_Read_Byte(unsigned char ack) { unsigned char i,receive=0; SDA_IN(); for(i=0;i<8;i++ ) { I2C_SCL(0); Delay_us(2); I2C_SCL(1); receive<<=1; if(READ_SDA)receive++; Delay_us(1); } if (!ack) I2C_NAck();//·¢ËÍnACK else I2C_Ack(); //·¢ËÍACK return receive; } uint8_t I2C_ReadAddr(uint8_t hardware_addr , uint8_t read_addr) { uint8_t temp=0; I2C_Start(); I2C_Send_Byte(hardware_addr); I2C_Wait_Ack(); I2C_Send_Byte(read_addr); I2C_Wait_Ack(); I2C_Start(); I2C_Send_Byte(hardware_addr + 1); I2C_Wait_Ack(); temp = I2C_Read_Byte(0); I2C_Stop(); return temp; } uint8_t I2C_WriteAddr(uint8_t hardware_addr , uint8_t write_addr, uint8_t write_data) { I2C_Start(); I2C_Send_Byte(hardware_addr); I2C_Send_Byte(write_addr); I2C_Send_Byte(write_data); I2C_Stop(); return 0; }
复制代码USBHID传输层报文(USBHID芯片代码,非K32W代码):
#include "usbd_custom_hid_if.h"__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END = { 0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1) ??????????????? 0x09, 0x01, // USAGE (Vendor Usage 1) ??????ID?? 0xa1, 0x01, // COLLECTION (Application) ??????,???????0xc0??? 0x09, 0x01, // USAGE (Vendor Usage 1)???????? 0x15, 0x00, // LOGICAL_MINIMUM (0) ???????????0 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) ???????????????255 0x95, 0x40, // REPORT_COUNT (64) ?????????,???64? 0x75, 0x08, // REPORT_SIZE (8) ??REPORT_SIZE 0x81, 0x02, // INPUT (Data,Var,Abs) ??USB??????PC??? 0x09, 0x01, // USAGE (Vendor Usage 1) ?????????? 0x15, 0x00, // LOGICAL_MINIMUM (0) ???????????0 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) ???????????????255 0x95, 0x40, // REPORT_COUNT (64) ?????????,???64? 0x75, 0x08, // REPORT_SIZE (8) ????????8bit,????????????0~ffff ffff 0x91, 0x02, // OUTPUT (Data,Var,Abs) ??USB?????PC?????? 0xc0 // END_COLLECTION ???? }; extern USBD_HandleTypeDef hUsbDeviceFS; static int8_t CUSTOM_HID_Init_FS(void); static int8_t CUSTOM_HID_DeInit_FS(void); static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state); USBD_CUSTOM_HID_ItfTypeDef USBD_CustomHID_fops_FS = { CUSTOM_HID_ReportDesc_FS, CUSTOM_HID_Init_FS, CUSTOM_HID_DeInit_FS, CUSTOM_HID_OutEvent_FS }; static int8_t CUSTOM_HID_Init_FS(void) { return (USBD_OK); } static int8_t CUSTOM_HID_DeInit_FS(void) { return (USBD_OK); } static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state) { UNUSED(event_idx); UNUSED(state); USBD_CUSTOM_HID_ReceivePacket(&hUsbDeviceFS); return (USBD_OK); }
复制代码全部回复 0
针对电子行业逐渐呈现碎片化、客制化的趋势,大联大推出汇聚内外工程师,搭建互相帮助乐于分享,解决问题的首选技术平台----研发心中的翰林院【大大通】。 其中包含了大联大代理的上百条产品线、数百个方案,以及最新的产品信息和原厂新闻。 【大大通】的方案涵盖智能家居、智慧城市、穿戴装置、智慧医疗、车联网、电源等应用领域;除了大联大内部的方案,还有原厂的最新方案,以及行业优质 合作方案商(IDH)的方案,打通客户、原厂、IDH 以及大联大的FAE 之间的壁垒,搭建整个技术的生态圈。 除了大联大七百余位专业FAE在线上进行高效、专 业的技术支持,【大大通】更希望汇聚所有工程师一起分享和成长。客户可以更直接快速的了解方案、解答疑问、获取技术文档,从而缩短客户方案量产时间。
- 帖子 121
- 回复 46
![](/static/image/mianbaoban/2.0/ad.png)
评测文章
热帖
大家都在看的技术资料
举报
内容系网友发布,其中涉及到安全隐患的内容系网友个人行为,不代表面包板社区观点
关闭
站长推荐
/3
![上一条 上一条](static/image/common/pic_nv_prev.gif)
![下一条 下一条](static/image/common/pic_nv_next.gif)
-
返回顶部
-
工具栏