Skocz do zawartości

Ven_64

Użytkownicy
  • Zawartość

    105
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

Ven_64 wygrał w ostatnim dniu 22 kwietnia 2014

Ven_64 ma najbardziej lubianą zawartość!

Reputacja

3 Neutralna

O Ven_64

  • Ranga
    5/10
  • Urodziny 06.01.1999

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Legnica
  1. Odczyt odbywa się poprzez pomiar czasu rozładowania kondensatora. Należy podać stan wysoki na wyjściu czujnika, odczekać 10us, ustawić pin na wejście bez rezystora pull-up i mierzyć czas rozładowania. Przynajmniej tak to rozumiem. Jakbym się przed zakupem bardziej w to zagłębił to pewnie wybrał bym wersje analogową... Ale cóż. Nie wiem dlaczego nie działa. Samo sterowanie silnikami działa jeśli if jest prawdziwy.
  2. Po dłuższej przerwie od programowania i robotyki, zabrałem się za forbotowy kurs stm32, i budowę prostego LFa na bazie nucleo i QTR_8RC. Mam jednak problem z oprogramowaniem tych czujników, gdyż są dość nietypowe w obsłudze. Są one zasilane z 3,3v. Program ma sprawdzać czujniki i jeżeli pierwszy z nich coś wykryje załączyć na 5s silniki. Kod wygląda następująco: /** Spis pinow A_PHASE - PC_0 B_PHASE - PC_1 A_ENABLE - PB_8 B_ENABLE - PB_9 MODE - PC_2 LED_ON - PC_3 1_qtr - PC_4 2_qtr - PC_5 3_qtr - PC_6 4_qtr - PC_7 5_qtr - PC_8 6_qtr - PC_9 7_qtr - PC_10 8_qtr - PC_11 PB6, PB7, PB8, PB9 - PWM - TIM4 */ #include "stm32f10x.h" #include "stm32f1xx_nucleo.h" volatile uint32_t timer_us = 0; short signal [8]; void SysTick_Handler() { if (timer_us) { timer_us--; } } void delay_us(int time) { timer_us = time; while (timer_us) {}; } void sensor() { GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_3; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); GPIO_SetBits(GPIOC, GPIO_Pin_3); // LEDON ON gpio.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); GPIO_SetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11); // Ladowanie kondensatorow delay_us(12); //12us na naladowanie GPIO_ResetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11); // koniec ladowania gpio.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11; gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; // zmiana trybu na wejscie bez podciagniecia GPIO_Init(GPIOC, &gpio); signal [0] = 0; // zerowanie odzczytow signal [1] = 0; signal [2] = 0; signal [3] = 0; signal [4] = 0; signal [5] = 0; signal [6] = 0; signal [7] = 0; while(1) { if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4) == 1) { signal[0] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == 1) { signal[1] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6) == 1) { signal[2] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7) == 1) { signal[3] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == 1) { signal[4] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9) == 1) { signal[5] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10) == 1) { signal[6] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11) == 1) { signal[7] +=1; } if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_7) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10) == 0 && GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11) == 0) { break; // przerwanie pętli po rozladowaniu } delay_us (1); } GPIO_ResetBits(GPIOC, GPIO_Pin_3); // LEDON OFF } int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); GPIO_InitTypeDef gpio; TIM_TimeBaseInitTypeDef tim; TIM_OCInitTypeDef channel; GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &gpio); TIM_TimeBaseStructInit(&tim); tim.TIM_CounterMode = TIM_CounterMode_Up; tim.TIM_Prescaler = 20 - 1; tim.TIM_Period = 100 - 1; //32kHz TIM_TimeBaseInit(TIM4, &tim); TIM_OCStructInit(&channel); channel.TIM_OCMode = TIM_OCMode_PWM1; channel.TIM_OutputState = TIM_OutputState_Enable; channel.TIM_Pulse = 0; TIM_OC3Init(TIM4, &channel); channel.TIM_Pulse = 0; TIM_OC4Init(TIM4, &channel); TIM_Cmd(TIM4, ENABLE); GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &gpio); gpio.GPIO_Pin = GPIO_Pin_13; gpio.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOC, &gpio); SysTick_Config(SystemCoreClock / 1000000); // automatycznie wywoluje systick handler co 1us int main_counter = 0; while(1) { sensor(); if (signal [0] != 0) { GPIO_SetBits(GPIOC, GPIO_Pin_2); // MODE << 1 GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1); // kierunek do przodu channel.TIM_Pulse = 50; //50% PWM TIM_OC3Init(TIM4, &channel); channel.TIM_Pulse = 50; //50% PWM TIM_OC4Init(TIM4, &channel); while(main_counter < 5000)//5s { main_counter += 1; delay_us(1000); } channel.TIM_Pulse = 0; TIM_OC3Init(TIM4, &channel); channel.TIM_Pulse = 0; TIM_OC4Init(TIM4, &channel); main_counter = 0; } } } Siedzę nad tym już parę dni i dalej nie wiem co jest nie tak
  3. Niebieskie ścieżki - bottom - to warstwa dolna, czerwone - top to warstwa górna. Widok jest z góry, tylko wszystkie ścieżki są widoczne, tak jakby nie było laminatu. Możesz wybrać warstwę z rozwijanej listy (lewy górny róg, na dole paska). Z tym stabilizatorem to nie wiem, w dokumentacji L7805 jest napisane, że dropout to 2V do max. 2,5V. A te 3A to niby tylko na chwilowe obciążenie... Chyba że to nie L7805. Jakich chcesz użyć silników? Nie lepiej zasilić bezpośrednio z aku?
  4. Dodaj przycisk reset (zwierający do masy) - może się przydać. Dodaj też podciągnięcie rezystorem do vcc na resecie. Chcesz zasilać silniki z 5v przez stabilizator? Całość będziesz zasilać z LiPo 2s?
  5. Gęstość nie wiem, ale raczej dość małą. Ale nada się, zobacz na roboty z katalogu - wiele z nich ma taką obudowę.
  6. Dodaj złącze do programowania, chyba, że używasz podstawki programującej. Podciągnij reset do vcc, przez rezystor 10k. Mógłbyś dodać po kondensatorze 100n równolegle do każdego silnika i filtrowanie zasilania mostka (zobacz jak to zrobili tutaj) Zamiast plątaniny połączeń możesz dać vcc i gnd w kilku miejscach, a sygnały zrobić labelami (to "ABC") o takich samych nazwach, będzie czytelniej. PS. Przycisk reset może się przydać, jeśli nie masz włącznika w koszyku z bateriami(?) to dodaj go.
  7. Zobacz w dokumentacji (rezonator). Ps. Podciągnij reset do vcc przez r 10k. I dodaj filtrację zasilania przy uC.
  8. Jak dla mnie po prostu za blade te kolory, ale może to tylko moje zdanie, lub przyzwyczajenie...
  9. Sprawdź kamerką z telefonu czy czujnik świeci. Może źle podłączyłeś?
  10. Większość części wczoraj przyszła, czekam jeszcze na mostki z TME. Niestety upatrzone akumulatory(Redox 3s 700mAh 20C) były niedostępne, więc będę się musiał zadowolić Dualsky 3s 400mAh 35C . Zdecydowałem się jednak na silniki 30:1HP. Z braku kasy kupiłem tymczasowo koła solarbotics. O których szkoda gadać. Wprowadziłem poprawki do płytki dolnej i górnej. W dolnej poprawiłem obudowy kondensatorów - niektórych nie było w smd, a te które były w smd nie miały w opisie informacji o obudowie, wiec musiałem sprawdzić na żywo. Oddaliłem też trochę rezonator od silników, choć nadal jest blisko. Jest się czego bać? Może przylutuje po przeciwnej stronie płytki niż silniki... W górnej dodałem wspomniane rezystory podciągające do 3,3v i filtry RC dla tactów. Po poprawkach prezentują się one tak: Górna: Dolna: W dolnej płytce napotkałem problem z masą przy mostku, a mianowicie chciałbym, aby masa rozlała się tak, jak zabazgrałem poniżej Czy da się to zrobić inaczej niż ręcznie kombinując ze ścieżkami? Jeśli wszystko ok z płytkami to niedługo je zamówię. Padło na Satland, chyba Was tym specjalnie nie zaskoczyłem Ale po prostu tylko oni w normalnej cenie robią płytki z 2mm laminatu, którego potrzebuję na dolną, żeby mieć pewność, żę ścieżki nie pękną, czy cóś. Tylko ta zielona soldermaska - nie przepadam za tym kolorem.
  11. Tylko lustro nie odbija IR. Testowałem kiedyś na fototranzystorze i diodzie IR oraz na module z ktirem.
  12. Satlanda znam, ale nie jestem z niego zbyt zadowolony, więc chcę poszukać jakiejś innej firmy, która robiłaby taniej i szybciej. Choć może szukam igły w stogu siana... Ktoś na forum zamawiał w chinach i to dość tanio, ale boje się, że może to trwać dużo dłużej. Wiem, żę jest trochę innych firm z Polski i Europy.
  13. Po kilku próbach, które mnie mocno zniechęciły, zabrałem się po raz kolejny do projektowania płytki dolnej i w końcu sukces! Pozostały mi tylko ewentualne poprawki i szukanie błędów. A oto jak się prezentuję: Prosiłbym Was o przejrzenie. Mam też do Was parę pytań: Czy nie będzie problemów z trawieniem płytki (firma) jeżeli DRC sygnalizuje minimalnie za bliskie odległości? Czy należy się obawiać za małej odległości elementów/ścieżek od krawędzi płytki - również minimalnie? I czy polecacie jakieś firmy, gdzie tanio można zamówić pcb? Po ewentualnych poprawkach, zabiorę się jeszcze raz za górną płytkę - dodam podciąg dla tactów, wyrównam złącze FFC i może dodam filtr RC na drgania styków.
  14. Treker, to przez otwory m2, które swoją drogą mają kiepski rozstaw, bo jeśli chce się zamontować wyświetlacz tak jak ja podwieszając, to odległość od krawędzi to tylko 1mm . Zrobiłem już górną płytkę (to sam "interfejs użytkownika"). Niema tu zbyt wiele, ale prosiłbym zerknąć czy wszystko ok. Płytki będą łączone zif'em 1mm i goldpinami(zasilanie). Z dolną płytką był problem z upchaniem vhn'ów, więc zmieniłem je na L6205D (maks 2,8A na kanał), zmianie uległo też zasilanie diod nadawczych - zmienione na 5v. Poniżej schemat (płytki dolnej), prosiłbym sprawdzić, czy dobrze mam ten mostek podłączony
  15. Planuje użyć taki 0,96 calowy wyświetlacz. Zdecydowałem się jednak na I2C.
×
×
  • Utwórz nowe...