
开源协议
:GPL 3.0
描述
硬件设计部分
为了节省IO资源这里我采用SN74HC595移位寄存器来驱动LED,QA引脚是数据的输入即为 你想要显示的数据,SRCLR引脚则是移位寄存器将数据一位一位的移动进去,RCLK引脚则是锁存引脚将数据锁存起来,随后就是数码管动态刷新显示数据了。
这里的限流电阻R1,R2,R3可以不要,或者选个小一点的,50欧姆左右。
按键电路很简单,直接连接普通IO口引脚就可以了,因为CW32内部IO口有上下拉电阻所以外部我没有在画电阻,配置按键的时候直接使用内部上下拉电阻即可。
这是LED显示电路方便我调试使用的,注意要选择合适的限流电阻,一般经验值在1k-4.7k之间。
这是本次的主角采用立创帝文心开发板CW32F030C8T6,我自己画了一个封装和原理图库,内置1.5V,2.5V电压基准源,也可以使用外部电压基准,adc精确度在0.366mv,。
ARM® Cortex®-M0+ 32 位微控制器,64K 字节FLASH,8K 字节RAM,内有丰富的资源GPIO,II2C,SPI,USART,ADC等等具体请看它的数据手册。
这是一个USB转串口模块,方便调试用的,注意这里CC1要接上5.1k电阻,D+,D-一对差分信号线,要等长处理,CH340则USB转串口.
在规则里面设置差分对,然后等长调节
SHT40温湿度模块,这里SDA是数据线,SCL是时钟线,PCB走线要类差分,这里R18和R19选择要合适一般经验值有4.7k,10k。具体多少根据实际要求来。
这是电流采样模块,这里R14是采样电阻使用2512封装功率3w的,在pcb设计中要开尔文接线如图,还有D4和R15是为了保护作用的,D4是稳压5V防止电压意外超过CW32IO的耐受电压,R15是限流电阻也是为了保护CW32IO口。
PCB3D图片
3D外壳
实物效果图
软件部分
温湿度
void SHT40_GetData(SHT40_t *sht40){
SHT40_I2C_Start();
SHT40_I2C_Write_Byte(SHT40_WRITE);
SHT40_I2C_WaitAck();
SHT40_I2C_Write_Byte(SHT40_Read_Mode);
SHT40_I2C_WaitAck();
SHT40_I2C_Stop();
delay_ms(10);
SHT40_I2C_Start();
SHT40_I2C_Write_Byte(SHT40_READ);
SHT40_I2C_WaitAck();
for(uint8_t i = 0; i < 6; i++){
sht40->read_data[i] = SHT40_I2C_Read_Byte();
if(i == 5){
SHT40_I2C_NoAck();
}else{
SHT40_I2C_Ack();
}
}
SHT40_I2C_Stop();
sht40->Temperature = (1.0*175*(sht40->read_data[0]*256 + sht40->read_data[1])) / 65535.0 - 45.0;
sht40->Humidity = (1.0*125*(sht40->read_data[3]*256 + sht40->read_data[4])) / 65535.0 - 6.0;
sht40->Temp = (uint16_t)(sht40->Temperature*10);
sht40->humi = (uint16_t)(sht40->Humidity*10);
}
这里我是用软件I2C自己写了一个协议,当发出地址之后一定要延时10ms芯片手册里面有说
读取协议倒是很简单发送地址和命令我这里选择重复测量,然后就是读取数据,最后根据公式
进行转换。
显示部分
OLED_ShowChinese(0,0,0,24,1);
OLED_ShowChinese(24,0,1,24,1);
sprintf((char *)OLED_Data,":%.1fC",sht40.Temperature);
OLED_ShowString(24*2,0,(uint8_t*)OLED_Data,24,1);
OLED_ShowChinese(0,24,3,24,1);
OLED_ShowChinese(24,24,4,24,1);
sprintf((char *)OLED_Data,":%.1fH",sht40.Humidity);
OLED_ShowString(24*2,24,(uint8_t*)OLED_Data,24,1);
汉字使用PCtoLCD2002进行取模,为了方便数据显示我这里使用sprintf和printf用法差不多
- 打开取模软件
- 汉字取模
2.1 点击模式,选择字符模式
2.2点击选项,进行设置
设置如下,点阵内的数字手动输入999,然后点击确定。
- 以生成16x16的汉字为例
- 3.1字宽,字高选择16
3.2在输入栏输入需要取模的汉字(只能是汉字),然后点击生成字模。
- 将生成的字模复制到h的数组中
电压电流
设计图

BOM


评论