日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模数转换器ADS1118 四通道采集电压 stm32f103

發(fā)布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模数转换器ADS1118 四通道采集电压 stm32f103 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模數(shù)轉換器ADS1118 四通道采集電壓 stm32f103

寄存器配置

uint16_t cha0_count=0xD08B;//0xC08B 0xD08B 0xE08B 0xF08B
uint16_t cha1_count=0xE08B;
uint16_t cha2_count=0xF08B;
uint16_t cha3_count=0xC08B;

引腳配置

配置 SCK引腳, GPIOA^5 配置 DOUT引腳,GPIOA^6 配置 DIN引腳,GPIOA^7 配置CE引腳,GPIOA^4

代碼ADS1118.C

#include "ADS1118.h"volatile uint8_t readata1; volatile uint8_t readata2; volatile uint8_t readata3; volatile uint8_t readata4; volatile uint32_t readata;void GPIO_ADS_Init(void) {SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/*SCK,MISO,MOSI,GPIOA^5,GPIOA^6,GPIOA^7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);CS_SET; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE); }int8_t SPI_ADS_Send(uint8_t dat) //發(fā)送數(shù)據(jù) {/* 當 SPI發(fā)送緩沖器非空時等待 */while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);/* 通過 SPI2發(fā)送一字節(jié)數(shù)據(jù) */SPI_I2S_SendData(SPI1, dat); /* 當SPI接收緩沖器為空時等待 */while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);/* Return the byte read from the SPI bus */return SPI_I2S_ReceiveData(SPI1); }void delay( uint32_t nCount ) {for(; nCount != 0; nCount--){;} }uint32_t SPI_RW_Reg(uint16_t CofigReg) {delay(10);readata1=SPI_ADS_Send((uint8_t)(CofigReg>>8));readata2=SPI_ADS_Send((uint8_t)CofigReg);readata=( ((uint32_t)readata1<<8) | (uint32_t)readata2 );delay(1000);if(readata>65499)readata=0;return readata; }

代碼ADS1118.H

#ifndef __ADS1118_H #define __ADS1118_H #include "stm32f10x.h"#define CS_RESET GPIO_ResetBits(GPIOA,GPIO_Pin_4) #define CS_SET GPIO_SetBits(GPIOA,GPIO_Pin_4)void GPIO_ADS_Init(void); int8_t SPI_ADS_Send(uint8_t dat); void delay( uint32_t nCount );uint32_t SPI_RW_Reg(uint16_t CofigReg);#endif

代碼

#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "exti.h" #include "ADS1118.h" #include "deal.h" #include "timebreak.h" #include "soundout.h"/*配置寄存器的值:0x8283 ( 1000 0010 1000 0011 )bit15:1bit14-12: 100 AIN0模擬輸入 bit11-9: 001 參考電壓4.096V000 參考電壓6.144Vbit8: 0 連續(xù)轉換模式bit4 0 ADC模式配置 SCK引腳, GPIOA^5 配置 DOUT引腳,GPIOA^6 配置 DIN引腳,GPIOA^7 配置CE引腳,GPIOA^4LCD_DrawLine(500,360,800, 360);LCD_Fill(200,0,210,210,0x0000);ch0_offset=get_offset(cha0_count);ch1_offset=get_offset(cha1_count);ch2_offset=get_offset(cha2_count);ch3_offset=get_offset(cha3_count);printf("%fV ",ch1_volte); */int main(void) {SystemInit(); GPIO_ADS_Init(); //ADS1118 引腳配置delay_init(); //延時函數(shù) 初始化 delay_ms(10);uart_init(115200); //串口初始化115200 LCD_Init(); //LCD初始化 delay_ms(10); LED_Init();delay_ms(10);tim2_config(); LCD_interface();POINT_COLOR=BLACK; TIM4_PWM_Init(99,0); showhz24str(20,50,BLACK,WHITE,"電壓"); showhz24str(20,100,BLACK,WHITE,"電壓"); showhz24str(20,150,BLACK,WHITE,"電壓"); showhz24str(20,200,BLACK,WHITE,"電壓"); LCD_ShowString(20+24*2,50,200,24,24,"L-X: ."); LCD_ShowString(20+24*2,100,200,24,24,"L-Y: ."); LCD_ShowString(20+24*2,150,200,24,24,"R-X: ."); LCD_ShowString(20+24*2,200,200,24,24,"R-Y: ."); LCD_ShowString(245,5,200,24,24,"POSE"); while(1){LCD_interface() ;ch0_volte=ch0_AD*0.1875/1000;ch1_volte=ch1_AD*0.1875/1000;ch2_volte=ch2_AD*0.1875/1000;ch3_volte=ch3_AD*0.1875/1000-1.04;//buchang ch0_AD_int=ch0_volte;ch1_AD_int=ch1_volte;ch2_AD_int=ch2_volte;ch3_AD_int=ch3_volte;LCD_ShowxNum(20+24*4,50,ch0_volte,1,24,0);LCD_ShowxNum(20+24*4,100,ch1_volte,1,24,0);LCD_ShowxNum(20+24*4,150,ch2_volte,1,24,0);LCD_ShowxNum(20+24*4,200,ch3_volte,1,24,0);LCD_ShowNum(20+24*5,50,(ch0_volte-ch0_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,100,(ch1_volte-ch1_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,150,(ch2_volte-ch2_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,200,(ch3_volte-ch3_AD_int)*1000,3,24); pose_deal();} }void TIM2_IRQHandler(void) {static u8 k=0;if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){switch (k){case 1:{ch0_AD=get_AD(cha0_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 2:{ch1_AD=get_AD(cha1_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 3:{ch2_AD=get_AD(cha2_count);LCD_Fill(0,250, 320, 450,0xffff);break;} case 4:{ch3_AD=get_AD(cha3_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 5:{ pose_judge();break; }default: break;}k++;if(k>5) k=1;}TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);//清除標志位 }

總結

以上是生活随笔為你收集整理的模数转换器ADS1118 四通道采集电压 stm32f103的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。