0

私はプロセッサ STM32F107 を初めて使用します。天秤である外部ソースから入力値を読み取る必要があります。このバランスは、プロセッサを含むボードの外部にあり、PA4 を介して通信します。

天びんからアナログ入力を読み取るにはどうすればよいですか?

これは、天びんから入力を読み取ろうとする最初の試みです。

この関数を使用して ADC をセットアップします。

void ADC_Configuration(void) {
ADC_InitTypeDef ADC_InitStructure;
/* PCLK2 is the APB2 clock */
/* ADCCLK = PCLK2/6 = 72/6 = 12MHz*/
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
/* Enable ADC1 clock so that we can talk to it */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* Put everything back to power-on defaults */
ADC_DeInit(ADC1);
/* ADC1 Configuration ------------------------------------------------------*/
/* ADC1 and ADC2 operate independently */
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
/* Disable the scan conversion so we do one at a time */
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
/* Don't do contimuous conversions - do them on demand */
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
/* Start conversin by software, not an external trigger */
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
/* Conversions are 12 bit - put them in the lower 12 bits of the result */
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
/* Say how many channels would be used by the sequencer */
ADC_InitStructure.ADC_NbrOfChannel = 1;
/* Now do the setup */ ADC_Init(ADC1, &ADC_InitStructure);
/* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));

}

そして、この関数を使用して入力を取得します。

u16 readADC1(u8 channel) {
ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_1Cycles5);
// Start the conversion
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// Wait until conversion completion
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
// Get the conversion value
return ADC_GetConversionValue(ADC1);

}

問題は、同じ重量の N 回の測定で、N 個の異なる結果が得られることです。たとえば、重量が 70kg で、readADC1(ADC_Channel_4) の出力は 715,760,748,711,759 などです。

私は何を間違っていますか?

4

2 に答える 2

2

天びんには、アナログ電圧を生成するロードセルが内蔵されています。バランスのプロセッサは、使用されていません(質問には詳細があまり含まれていないため、これを想定しています)。stm32 f107 コントローラーには、オンチップ ADC (アナログからデジタルへのコンバーター) があります。ロード セルの出力 (天びんからのアナログ信号) を stm32 f107 のアナログ入力ピンに接続します。アナログ信号をサンプリングしてデジタルに変換するように ADC を構成します (サンプル コードを参照してソフトウェアを記述します)。

于 2013-07-26T04:57:36.443 に答える