Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: jankilodvandam - 20 Nisan 2016, 13:45:53

Başlık: Analog veriyi Led parlaklığını kontrol etmede kullanmak
Gönderen: jankilodvandam - 20 Nisan 2016, 13:45:53
STM32F4 Discovery geliştirme kartımdaki adc modülünü kullanarak aldığım analog veriyi pwm oluşturup board üzerindeki ledlerin parlaklığıını kontrol etmek için kullanmak istiyorum. Sharp( GP2Y0A21YK Kızılötesi Sensör 10 - 80 cm)  sensörü uzak mesafeyi algılarsa en az yanmasını, yaklaştıkça led parlaklığının artmasını istiyorum. Derlediğim kod şu şekilde




#include "stm32f4xx.h"
uint16_t Read_ADC(void)
{
ADC_RegularChannelConfig(ADC1,ADC_Channel_9,1,ADC_SampleTime_84Cycles); //adc verisini hesaplayacak fonksiyon.
ADC_SoftwareStartConv(ADC1); //dönüsümü baslatir.
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//içerdeki _art sagland1kca alta gecmez.
return ADC_GetConversionValue(ADC1);
}

int main(void)
{

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef   ADC_InitStruct;
uint16_t ADC_Data;



RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd   = GPIO_PuPd_NOPULL;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStruct);


GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd   = GPIO_PuPd_NOPULL;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_SetBits(GPIOD, GPIO_Pin_13);

GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);

    TIM_TimeBaseInitStruct.TIM_Prescaler = 0;
    TIM_TimeBaseInitStruct.TIM_Period = 8399;
    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct);
    TIM_Cmd(TIM4, ENABLE);
   TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);


    TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState  = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OCPolarity   = TIM_OCPolarity_High;

    TIM_OCInitStruct.TIM_Pulse = 2099;
    TIM_OC1Init(TIM4, &TIM_OCInitStruct);
    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);

ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
ADC_Init(ADC1, &ADC_InitStruct);
   ADC_Cmd(ADC1, ENABLE);





while (1)
{

ADC_Data = Read_ADC();

TIM_SetCompare1(TIM4,ADC_Data);

}}



Yardımcı olacak birileri var mıdır.